1. Field of the Invention
The present invention relates to the field of systems for distributed computing, communication and control and, more specifically, communication of information between devices in a distributed computing environment.
2. Description of the Related Art
In distributed computer systems it is necessary to provide for communication of information between nodes in the system. A number of methods for providing such communication are known in the art.
These methods include message passing techniques in which messages are passed, over a medium, from one node to another in a network. In message passing techniques, messages are built by a sender node and sent to one or more receiver nodes. The message is then parsed by the receiver node in order to correctly interpret the data. Message passing allows the advantage of passing large amounts of data in an expected format. Of course, over time the format of the message may be required to change to support new applications or features. This typically leads to compatibility issues between nodes on the network.
A second technique involves remote procedure calls in which a first node, requiring data which exists on a second node, calls a procedure executing on the second node where the data exists and requests the procedure to manipulate the data and provide a result to the first node. Remote procedure calls are typically suited to passing small amounts of data; however, a separate procedure call is typically required for each interchange. Therefore, it is likely in any networking system that over time additional procedure calls will be required in the network as new functions are carried out by the network. The addition of new procedure calls to certain nodes of the network leads to incompatibility between nodes, because the existing nodes do not know of and cannot execute the new remote procedure calls.
A third technique for communication of data in a network involves data sharing. Bal, Henri E., Steiner, Jennifer G., and Tanenbaum, Andrew S., Programming Languages for Distributed Computing Systems, ACM Computing Surveys, Vol. 21, No. 3, September, 1989, pp. 261-322 (hereinafter Bal et al.) describes certain data sharing techniques. A discussion of data sharing may be found in the Bal et al. article at pages 280, et seq. (It should also be noted that a discussion of messaging may be found in the Bal et al. article at pages 276, et seq. along with a general overview of interprocess communication and synchronization.)
Bal et al. describes how parts of a distributed program can communicate and synchronize through use of shared data Bal et al. states that, if two processes have access to the same variable, communication can take place by one processor setting the variable and the other processor reading the variable. This communication is described as being allowed to take place whether the two processors are both running on a host where the shared data is stored and thus can manipulate the shared data directly, or if the processes are running on different hosts and access to the shared data is accomplished by sending a message to the host on which the shared data resides.
Two types of shared data are described: (1) shared logical variables; and (2) distributed data structures. Briefly, shared logical variables are described as facilitating a communication channel between processes through a xe2x80x9csingle-assignmentxe2x80x9d property. Initially, a shared logical variable is unbound, but once a value is assigned to the variable the variable is considered to be bound. An example is provided in which the three goals of conjunction:
goal_1 (X, Y), goal_2 (X, Y), and goal_3 (X)
are assumed and solved in parallel by processes P1, P2 and P3. The variable X is initially unbound and represents a communication channel between the three processes. If any of the processes binds X to a value, the other processes can use this value. Likewise, Y is a channel between P1 and P2. Processes synchronize by suspending on unbound variables. For example, if Y is to be used to communicate information from P1 to P2, then P2 may suspend until Y is bound by P1.
It should be emphasized that in the described concept of shared logical variables, the term binding is used to describe a process of assigning a value to a variable. As will be seen below, the term binding is also used to describe the present invention, however, the meaning of the term is significantly different and the reader is cautioned to avoid confusion between the concepts represented by these two uses of this term. Generally, in the present invention, the term binding is used to indicate a process of associating a variable of one node with a variable of at least one other node. It is not necessary that the variable of either node has yet been assigned a data value.
Distributed data structures are data structures which may be manipulated simultaneously by several processes. In concept, all processes share one global memory termed xe2x80x9ctuple spacexe2x80x9d or TS. The elements of TS are ordered sequences of values, similar to records in a language such as Pascal. Three operations may take place on TS: (1) xe2x80x9cOUTxe2x80x9d adds a tuple to TS; (2) xe2x80x9cREADxe2x80x9d reads a tuple from TS; and (3) xe2x80x9cINxe2x80x9d reads a tuple from TS and deletes it from TS. Thus, in order to change the value of a tuple in TS it is necessary to first perform an IN operation, then to manipulate the data, and then perform an OUT operation. The requirement that a tuple must first be removed by the IN operation makes it possible to build distributed systems without conflict between accesses by the various processes.
Bal et al. contrasts distributed data structures with interprocess communication techniques noting that communication accomplished by distributed data structures is anonymous. A process reading a tuple from TS does not know or care which other process inserted the tuple. Further, a process executing an OUT does not specify which process the tuple is intended to be read by.
Bal et al. states that in concept distributed data structures utilizing the tuple space implement conceptually a shared memory, although in implementation a physical shared memory is not required. However, as can be seen, in a system utilizing such distributed data structures a single copy of the data is stored in tuple space whether or not such tuple space is implemented as a single physical shared memory. Separate copies of the data are not maintained for the various processes or on the various hosts. In fact, maintaining separate copies would lead to data conflict possibilities as the various nodes attempted to coordinate updates of the variable between the various process and hosts. Thus, the reason or requiring use of the IN command to delete a tuple before allowing manipulation of the data represented by the tuple.
The present invention discloses a networked communication system which is perhaps closest in certain concepts to the described distributed data structures. However, it can, of course, be appreciated that certain advantages may be gained from development of a system which utilizes certain features of distributed data structures while retaining flexibility in allowing multiple copies of a data value to be stored on the various nodes.
The present invention discloses certain improved programming language and data structure support for communication, sensing and control as may be used by nodes of the present invention. It is known in the art to allow for scheduling of tasks through use of a programming statement such as a xe2x80x9cwhenxe2x80x9d clause or the like. However, in known systems such tasks may only be scheduled to be executed on the occurrence of a predefined event such as may be defined by the compiler writer. Examples of such events typically include expiration of a timer or input pin state changes. Such known systems do not allow for definitions of events, other than such predefined events. It has been discovered that it is useful to provide for definition of events as any valid programming language statement which may be evaluated to a true or false condition.
Of course, any number of known systems allow for declaration of variables and when declaring such variables certain parameters may be specified which may be set to a state indicative of a desired characteristic of the variable. For example, a variable may be declared as input or output, as a given variable type (e.g., boolean, numeric, etc.). However, once declared such characteristics are static and may only be changed by changing the source program which declares the variables. It has been discovered that it would be useful to provide for a system in which the state of at least certain parameters may be changed during system configuration allowing for greater flexibility in optimizing the system of the preferred embodiment.
Finally, in known systems it is necessary to call certain I/O library procedures to declare and use I/O devices. Such calls to I/O procedures may be quite complex and require significant skill on the part of the programmer to properly code and utilize the routines. The present invention discloses a system having improved methods for declaration and use of I/O devices.
It is a primary object of the present invention to provide for improved communication of information between nodes of a distributed network.
It is more specifically an object of the present invention to provide for improved communication of information in a highly distributed computer system in which a problem may be broken down into small units in which each node accomplishes a small part of the entire application. In such a system, data communication may be typically accomplished in relatively small units of dataxe2x80x94however, significant communication of data between nodes of the network is required.
It is further an object of the present invention to provide for improved communication of information in a distributed computing system by allowing for standard communication techniques between nodes.
It is still further an object of the present invention to provide for improved communication of information by providing certain facilities, structures and tools for such communication.
It is also an object of the present invention to provide improved data structures and programming language support for communication and other aspects of the present invention.
As one aspect of providing such improved data structures and programming language support, it is one aspect of the present invention to provide for declaration of variables having configurable parameters leading to improved ability to maintain and optimize networks of the present invention.
As another aspect of providing such improved data structures and programming language support, it is desired to provide for increased ease in declaring and communicating with I/O devices of the present invention.
As still another aspect of providing such improved data structures and programming language support, it is desired to provide for improved scheduling functions allowing for use of programmer-defined or predefined events in scheduling of tasks to be executed.
It is also an object of the present invention to provide simplified installation and network maintenance. Such an objective may be accomplished by storing in each node the node""s application interface such that nodes may identify themselves and their application requirements to a network management node at installation time and when it is necessary to recover the complete network database.
To accomplish such a simplified installation and maintenance objective, it is a further objective of the present invention to define an interface file format which may efficiently store and allow retrieval of such identification and application requirement information.
These and other objects of the present invention will be better understood with reference to the Detailed Description of the Preferred Embodiment, the accompanying drawings, and the claims.
A network for communicating information having at least a first and second node is described in which each node includes data storage for storing data representing a variable V and further includes a processor coupled with the data storage. In the case of the first node, the processor may manipulate and write to new values to the variable V. After having updated the variable V with a new value, the processor then assembles and communicates a packet for transmission on the network. The packet includes the new data value for the variable V. The second node then receives the packet and stores the new value for the variable V in its data storage.
In particular, during programming of the first node, it is declared as a writer of the variable V and likewise during programming of the second node, it is declared as a reader of the variable V. During configuration of the network, a communication connection between the first node and the second node is defined and during later communication of message packets, addressing of message packets between the various nodes is accomplished through use of address tables based on the definition of such connections.
Further, it is disclosed to utilize a standardized set of variable types in accomplishing such communication. Use of a standardized set of variable types leads to increased compatibility between nodes of different manufacture as well as increased ease in configuring networks.
Finally, certain extensions are provided to standard programming languages to provide for increased ease of use of the data communication features of the present invention.
These and other aspects of the present invention will be apparent to one of ordinary skill in the art with further reference to the below Detailed Description of the Preferred Embodiment and the accompanying drawings.